<?php

class Cep {

    public function buscaEndereco() {
        $trataDados = new TrataDados();
        $retorno = array();

        if ($trataDados->pegaDados()) {
            $dados = $trataDados->getDados();
            try {
                $sql = 'SELECT
                            cep.logradouro,
                            cep.tipo_logradouro,
                            cep.cidade,
                            cep.bairro,
                            cep.uf,
                            cep.resultado,
                            estado.id_estado
                        FROM
                            cep
                        INNER JOIN
                            estado ON cep.uf = estado.sigla
                        WHERE
                            cep.cep = :cep';
                $pdo = Conexao::open('cep');
                $consulta = $pdo->prepare($sql);
                $consulta->bindParam(':cep', $dados['cep'], PDO::PARAM_STR, 9);
                $consulta->execute();
                if ($consulta->rowCount()) {
                    $linha = $consulta->fetch(PDO::FETCH_ASSOC);
                    $linha['logradouro'] = utf8_encode($linha['logradouro']);
                    $linha['cidade'] = utf8_encode($linha['cidade']);
                    $linha['bairro'] = utf8_encode($linha['bairro']);
                    $linha['tipo_logradouro'] = utf8_encode($linha['tipo_logradouro']);
                    $retorno['resultado'] = 'sim';
                    $retorno['cep'] = $linha;
                }
                unset($pdo);
            } catch (PDOException $e) {
                new Excecao($e);
                $retorno['resultado'] = 'erro';
                $retorno['erro'] = 'busca_cep';
            }
        } else {
            $retorno['resultado'] = 'dados_errados';
            $retorno['dados_errados'] = $trataDados->getErro();
        }
        return json_encode($retorno);
    }

    public function buscaCidadesDoEstadoHospedagem() {
        $trataDados = new TrataDados();
        $retorno = array();
        $cidades = array();

        if ($trataDados->pegaDados()) {
            $dados = $trataDados->getDados();

            $sql = "
                SELECT distinct(endereco.cidade) AS cidade
                FROM cadastros.estado, cadastros.endereco
                WHERE estado.sigla = :uf AND endereco.id_estado = estado.id_estado
                ORDER BY endereco.cidade";
            $pdo = Conexao::open('sistema'); 
            $consulta = $pdo->prepare($sql); 
            $consulta->bindParam(':uf', $dados['UF'], PDO::PARAM_STR);
            $consulta->execute();
            $cidades = $consulta->fetchAll(PDO::FETCH_ASSOC);

            $retorno['cidades'] = $cidades;
            $retorno['resultado'] = 'sim';
        }
        return json_encode($retorno);
    }

    public function buscaCidadesDoEstado() {

        $trataDados = new TrataDados();
        $retorno = array();
        $cidades = array();

        if ($trataDados->pegaDados()) {
            $dados = $trataDados->getDados();

            $pdo = Conexao::open('cep');
            $consulta = $pdo->prepare("SELECT distinct(cidade) AS cidade FROM cep WHERE uf = :uf ORDER BY cidade"); // prepara sql
            $consulta->bindParam(':uf', $dados['UF'], PDO::PARAM_STR);
            $consulta->execute();
            $cidades = $consulta->fetchAll(PDO::FETCH_ASSOC);
            for ($i = 0; $i < count($cidades); $i++){
                $cidades[$i]['cidade'] = utf8_encode($cidades[$i]['cidade']);
            }
            $retorno['cidades'] = $cidades;
            $retorno['resultado'] = 'sim';
        }
        return json_encode($retorno);
    }

    public function buscaLogradourosDaCidade() {

        $trataDados = new TrataDados();
        $retorno = array();
        $resultado = array();

        if ($trataDados->pegaDados()) {
            $dados = $trataDados->getDados();

            $clause = '';
            if (!empty($dados['busca_cep_bairro'])) {
                $clause = ' AND bairro LIKE :bairro';
            }

            if (!empty($dados['busca_cep_logradouro'])) {
                $clause .= ' AND logradouro LIKE :logradouro ';
            }

            $sql = "SELECT
                        cep.tipo_logradouro,
                        cep.logradouro,
                        cep.bairro,
                        cep.cep
                    FROM
                        cep
                    WHERE
                        uf = :uf
                    AND
                        cidade = :cidade
                    {$clause};";

            $pdo = Conexao::open('cep'); // abre conexao com o banco de dados
            $consulta = $pdo->prepare($sql); // prepara sql
            $consulta->bindParam(':uf', $dados['busca_cep_estado'], PDO::PARAM_STR);
            $consulta->bindParam(':cidade', $dados['busca_cep_cidade'], PDO::PARAM_STR);
            if (!empty($dados['busca_cep_bairro'])) {
                $consulta->bindValue(':bairro', '%' . $dados['busca_cep_bairro'] . '%', PDO::PARAM_STR);
            }
            if (!empty($dados['busca_cep_logradouro'])) {
                $consulta->bindValue(':logradouro', '%' . $dados['busca_cep_logradouro'] . '%', PDO::PARAM_STR);
            }
            $consulta->execute(); // executa sql


            while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
                $resultado[] = array('logradouro' => $linha['tipo_logradouro'] . ' ' . $linha['logradouro'], 'bairro' => $linha['bairro'], 'cep' => $linha['cep']);
            }

            $pdo = null; // fecha conexao


            $retorno['logradouros'] = $resultado;
            $retorno['resultado'] = 'sim';
        }
        return json_encode($retorno);
    }

}

?>